package bz.ziro.kanbe.util;

import java.util.List;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.datastore.Key;

import bz.ziro.kanbe.meta.CommentConfigMeta;
import bz.ziro.kanbe.meta.CommentMeta;
import bz.ziro.kanbe.meta.LogMeta;
import bz.ziro.kanbe.meta.MailMeta;
import bz.ziro.kanbe.meta.PageMeta;
import bz.ziro.kanbe.meta.SiteFileMeta;
import bz.ziro.kanbe.meta.SiteListDataMeta;
import bz.ziro.kanbe.meta.SiteListMeta;
import bz.ziro.kanbe.meta.SiteMeta;
import bz.ziro.kanbe.meta.SiteTextMeta;
import bz.ziro.kanbe.meta.TemplateBrowserMeta;
import bz.ziro.kanbe.meta.TemplateMeta;
import bz.ziro.kanbe.meta.UserAgentMeta;
import bz.ziro.kanbe.model.Page;
import bz.ziro.kanbe.model.SiteListData;
import bz.ziro.kanbe.model.Template;
import bz.ziro.kanbe.model.TemplateBrowser;

/**
 * キー作成用
 * @author Administrator
 */
public class KeyFactory {

    private static final SiteMeta siteMeta = new SiteMeta();
    private static final PageMeta pageMeta = new PageMeta();
    private static final TemplateMeta templateMeta = new TemplateMeta();
    private static final TemplateBrowserMeta browserMeta = new TemplateBrowserMeta();

    private static final UserAgentMeta agentMeta = new UserAgentMeta();
    private static final SiteTextMeta textMeta = new SiteTextMeta();
    private static final SiteFileMeta fileMeta = new SiteFileMeta();

    private static final SiteListMeta listMeta = new SiteListMeta();
    private static final SiteListDataMeta listDataMeta = new SiteListDataMeta();

    private static final MailMeta mailMeta = new MailMeta();
    
    private static final LogMeta logMeta = new LogMeta();
   
    private static final CommentConfigMeta commentConfigMeta = new CommentConfigMeta();
    private static final CommentMeta commentMeta = new CommentMeta();
    /**
     * サイトキーの作成
     * @param aId
     * @return
     */
    public static Key createSiteKey(Long aId) {
        return Datastore.createKey(siteMeta,aId);
    }
    /**
     * サイトキーの生成
     * @return
     */
    public static Key allocateSiteKey() {
        return Datastore.allocateId(siteMeta);
    }
    /**
     * ログキーの作成
     * @param aId
     * @return
     */
    public static Key createLogKey(Long aId) {
        return Datastore.createKey(logMeta,aId);
    }
    /**
     * ログキーの生成
     * @return
     */
    public static Key allocateLogKey() {
        return Datastore.allocateId(logMeta);
    }

    /**
     * エージェントの作成
     * @param aId
     * @return
     */
    public static Key createAgentKey(Long aId) {
        return Datastore.createKey(agentMeta,aId);
    }
    /**
     * エージェントキーの生成
     * @return
     */
    public static Key allocateAgentKey() {
        return Datastore.allocateId(agentMeta);
    }
    /**
     * テキストキーの作成
     * @param aId
     * @return
     */
    public static Key createTextKey(Long aId) {
        return Datastore.createKey(textMeta,aId);
    }
    /**
     * テキストキーの生成
     * @return
     */
    public static Key allocateTextKey() {
        return Datastore.allocateId(textMeta);
    }
    /**
     * ファイルキーの作成
     * @param aId
     * @return
     */
    public static Key createFileKey(Long aId) {
        return Datastore.createKey(fileMeta,aId);
    }
    /**
     * ファイルキーの生成
     * @return
     */
    public static Key allocateFileKey() {
        return Datastore.allocateId(fileMeta);
    }
    /**
     * リストキーの作成
     * @param aId
     * @return
     */
    public static Key createListKey(Long aId) {
        return Datastore.createKey(listMeta,aId);
    }
    /**
     * リストキーの生成
     * @return
     */
    public static Key allocateListKey() {
        return Datastore.allocateId(listMeta);
    }

    /**
     * ページキーの作成
     * @param siteKey
     * @param aId
     * @return
     */
    public static Key createPageKey(Long siteKey,Long aId) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.createKey(key,pageMeta,aId);
    }
    /**
     * ページキーの生成
     * @param siteKey
     * @return
     */
    public static Key allocatePageKey(Long siteKey) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.allocateId(key,pageMeta);
    }
    /**
     * コメントキーの作成
     * @param aId
     * @return
     */
    public static Key createCommentKey(Long aId) {
        return Datastore.createKey(commentMeta,aId);
    }
    /**
     * コメントキーの生成
     * @return
     */
    public static Key allocateCommentKey() {
        return Datastore.allocateId(commentMeta);
    }
    /**
     * コメント設定キーの作成
     * @param aId
     * @return
     */
    public static Key createCommentConfigKey(Long aId) {
        return Datastore.createKey(commentConfigMeta,aId);
    }
    /**
     * コメント設定キーの生成
     * @return
     */
    public static Key allocateCommentConfigKey() {
        return Datastore.allocateId(commentConfigMeta);
    }
    /**
     * テンプレートキーの作成
     * @param siteKey
     * @param aId
     * @return
     */
    public static Key createTemplateKey(Long siteKey,Long aId) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.createKey(key,templateMeta,aId);
    }
    /**
     * テンプレートキーの生成
     * @param siteKey
     * @return
     */
    public static Key allocateTemplateKey(Long siteKey) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.allocateId(key,templateMeta);
    }
    /**
     * ブラウザキーの作成
     * @param aTemplateKey
     * @param aId
     * @return
     */
    public static Key createBrowserKey(Key aTemplateKey,Long aId) {
        return Datastore.createKey(aTemplateKey,browserMeta,aId);
    }
    /**
     * ブラウザキーの生成
     * @param templateKey
     * @return
     */
    public static Key allocateBrowserKey(Key templateKey) {
        return Datastore.allocateId(templateKey,browserMeta);
    }
    /**
     * リストデータキーの作成
     * @param listKey
     * @param aId
     * @return
     */
    public static Key createListDataKey(Long listKey,Long aId) {
        Key key = Datastore.createKey(listMeta, listKey);
        return Datastore.createKey(key,listDataMeta,aId);
    }
    /**
     * リストデータキーの生成
     * @param listKey
     * @return
     */
    public static Key allocateListDataKey(Long listKey) {
        Key key = Datastore.createKey(listMeta, listKey);
        return Datastore.allocateId(key,listDataMeta);
    }
    /**
     * メールキーの作成
     * @param siteKey
     * @param aId
     * @return
     */
	public static Key createMailKey(Long siteKey,Long aId) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.createKey(key,mailMeta,aId);
	}
    /**
     * メールキーの生成
     * @param siteKey
     * @return
     */
    public static Key allocateMailKey(Long siteKey) {
        Key key = Datastore.createKey(siteMeta, siteKey);
        return Datastore.allocateId(key,mailMeta);
    }

    /**
     * キー追加
     * @param aPageList
     * @param keyList
     */
    public static void addPageKey(List<Page> aPageList,List<Key> keyList) {
        for ( Page page : aPageList ) {
            keyList.add(page.getKey());
        }
    }
    /**
     * キー追加
     * @param aPageList
     * @param keyList
     */
    public static void addTemplateKey(List<Template> aObjList,List<Key> keyList) {
        for ( Template template : aObjList ) {
            keyList.add(template.getKey());
        }
    }
    /**
     * キー追加
     * @param aPageList
     * @param keyList
     */
    public static void addBrowserKey(List<TemplateBrowser> aBrowserList,List<Key> keyList) {
        for ( TemplateBrowser browser : aBrowserList ) {
            keyList.add(browser.getKey());
        }
    }
    /**
     * キー追加
     * @param aPageList
     * @param keyList
     */
    public static void addListDataKey(List<SiteListData> aListDataList,List<Key> keyList) {
        for ( SiteListData listData : aListDataList ) {
            keyList.add(listData.getKey());
        }
    }
}
